<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="zh-CN">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<meta name="keywords" content="论坛活动 【原创】【看雪读书月】【学习心得】我的第一个CrackMe分析，及注册机制作, 加密,解密,加壳,脱壳,加密壳,软件安全,软件保护,破解,debug,pack,unapck" />
	<meta name="description" content="[论坛存档] 论坛活动 【原创】【看雪读书月】【学习心得】我的第一个CrackMe分析，及注册机制作 『软件调试论坛』" />
	
	<title>论坛活动 【原创】【看雪读书月】【学习心得】我的第一个CrackMe分析，及注册机制作 [论坛存档]  - 看雪软件安全论坛</title>
	<link rel="stylesheet" type="text/css" href="http://bbs.pediy.com/archive/archive.css" />
</head>
<body>
<div class="pagebody">
<div id="navbar"><a href="http://bbs.pediy.com/archive/index.php">看雪软件安全论坛</a> &gt; <a href="http://bbs.pediy.com/archive/index.php?f-3.html">软件安全</a> &gt; <a href="http://bbs.pediy.com/archive/index.php?f-4.html">『软件调试论坛』</a> &gt; 论坛活动 【原创】【看雪读书月】【学习心得】我的第一个CrackMe分析，及注册机制作</div>
<hr />
<div class="pda"><a href="http://bbs.pediy.com/archive/index.php?pda=1" rel="nofollow">PDA</a></div>
<p class="largefont">查看完整版本 : 论坛活动 <a href="http://bbs.pediy.com/showthread.php?t=68432">【原创】【看雪读书月】【学习心得】我的第一个CrackMe分析，及注册机制作</a></p>
<hr />

<div class="post"><div class="posttop"><div class="username">usufu</div><div class="date">2008-07-13, 16:04:04</div></div><div class="posttext">【文章标题】: 【看雪读书月】【学习心得】我的第一个CrackMe分析，及注册机制作<br />
【文章作者】: usufu<br />
【软件名称】: echap303.exe<br />
【软件大小】: 303KB<br />
【下载地址】: 附件上传<br />
【加壳方式】: 无壳<br />
【保护方式】: 无壳<br />
【编写语言】: Borland Delphi<br />
【使用工具】: OD VC6 EDITPLUS PEiD<br />
【操作平台】: XPSP3<br />
【软件介绍】: 不知哪位大侠写的crackme，我拿来学习。<br />
【作者声明】: 只是感兴趣，没有其他目的。失误之处敬请诸位大侠赐教!<br />
--------------------------------------------------------------------------------<br />
【详细过程】<br />
  开始：<br />
      拿到《加密与解密三》了，看了几天，现在看到第五章了，本想研究下那个技术挑战参加下看雪读书月活动的，但我等<br />
  小辈水平不足，只能研究到用户名的限制，和第一步的一些对应关系后就实在是找不到北了。郁闷之余，决定换种方式来参<br />
  加这个活动了。于是找来一个CrackMe，逆向了一下，研究了算法，写出了注册机，不知道这个算不算学习心得了。第一次<br />
  写这种文章，错误之处还望大家海涵。<br />
  过程：<br />
      这个CrackMe的名字叫echap303.exe，是从我电脑上翻出来的，用PEiD查看是用Delphi写的，无壳。程序中采用明码比较<br />
  所以算法比较好跟，而注册机呢，就用《加密与解密第三版》中我刚看的内容“直接用程序的反汇编代码”来写注册机，偷个<br />
  懒，哈哈。以下是详细步骤：<br />
      1、首先运行程序，随意输入注册码与序列号，不错，有错误提示，留心下错误提示的内容。“Wrong Code”<br />
      2、用OD载入程序，在汇编代码处，右键，查找-》所有参考文本字串，找到这个“Wrong Code”，双击，来到对应代码<br />
  处。<br />
  004417FD  |.  8B55 F8       mov     edx, dword ptr [ebp-8]<br />
  00441800  |.  58            pop     eax<br />
  00441801  |.  E8 3E23FCFF   call    00403B44                         ;这里下断<br />
  00441806  |.  75 1A         jnz     short 00441822                   ;这里一跳就错了.<br />
  00441808  |.  6A 40         push    40<br />
  0044180A  |.  B9 6C184400   mov     ecx, 0044186C                    ;  ASCII &quot;U made it&quot;<br />
  0044180F  |.  BA 78184400   mov     edx, 00441878                    ;  ASCII &quot;Right Code&quot;<br />
  00441814  |.  A1 302C4400   mov     eax, dword ptr [442C30]<br />
  00441819  |.  8B00          mov     eax, dword ptr [eax]<br />
  0044181B  |.  E8 D4D6FFFF   call    0043EEF4<br />
  00441820  |.  EB 18         jmp     short 0044183A<br />
  00441822  |&gt;  6A 10         push    10<br />
  00441824  |.  B9 84184400   mov     ecx, 00441884                    ;  ASCII &quot;Error&quot;<br />
  00441829  |.  BA 8C184400   mov     edx, 0044188C                    ;  ASCII &quot;Wrong Code&quot;《---双击后来到此处<br />
  向上找找，看看是从哪儿跳到这儿来的呢？原来是从00441806处跳过来的,紧接着,我们会怀疑上面的call是不是有点可疑呢?<br />
  在这个call上F2下断,而后F9让程序跑起来.<br />
  <br />
      3、程序运行起来之后,我们仍旧在用户名和序列号中随便输入,而后点击&quot;OK&quot;,程序被断下,而后F7跟进这个Call,我们看看<br />
  它搞什么搞.进去之后的代码如下:<br />
  00403B44  /$  53            push    ebx<br />
  00403B45  |.  56            push    esi<br />
  00403B46  |.  57            push    edi<br />
  00403B47  |.  89C6          mov     esi, eax<br />
  00403B49  |.  89D7          mov     edi, edx<br />
  00403B4B  |.  39D0          cmp     eax, edx<br />
  00403B4D  |.  0F84 8F000000 je      00403BE2<br />
  00403B53  |.  85F6          test    esi, esi<br />
  00403B55  |.  74 68         je      short 00403BBF<br />
  00403B57  |.  85FF          test    edi, edi<br />
  00403B59  |.  74 6B         je      short 00403BC6<br />
  00403B5B  |.  8B46 FC       mov     eax, dword ptr [esi-4]<br />
  00403B5E  |.  8B57 FC       mov     edx, dword ptr [edi-4]<br />
  00403B61  |.  29D0          sub     eax, edx<br />
  00403B63  |.  77 02         ja      short 00403B67<br />
  00403B65  |.  01C2          add     edx, eax<br />
  00403B67  |&gt;  52            push    edx<br />
  00403B68  |.  C1EA 02       shr     edx, 2<br />
  00403B6B  |.  74 26         je      short 00403B93<br />
  00403B6D  |&gt;  8B0E          /mov     ecx, dword ptr [esi]<br />
  00403B6F  |.  8B1F          |mov     ebx, dword ptr [edi]<br />
  00403B71  |.  39D9          |cmp     ecx, ebx<br />
  00403B73  |.  75 58         |jnz     short 00403BCD<br />
  00403B75  |.  4A            |dec     edx<br />
  00403B76  |.  74 15         |je      short 00403B8D<br />
  00403B78  |.  8B4E 04       |mov     ecx, dword ptr [esi+4]<br />
  00403B7B  |.  8B5F 04       |mov     ebx, dword ptr [edi+4]<br />
  00403B7E  |.  39D9          |cmp     ecx, ebx<br />
  00403B80  |.  75 4B         |jnz     short 00403BCD<br />
  00403B82  |.  83C6 08       |add     esi, 8<br />
  00403B85  |.  83C7 08       |add     edi, 8<br />
  00403B88  |.  4A            |dec     edx<br />
  00403B89  |.^ 75 E2         \jnz     short 00403B6D<br />
  00403B8B  |.  EB 06         jmp     short 00403B93<br />
  00403B8D  |&gt;  83C6 04       add     esi, 4<br />
  00403B90  |.  83C7 04       add     edi, 4<br />
  00403B93  |&gt;  5A            pop     edx<br />
  00403B94  |.  83E2 03       and     edx, 3<br />
  00403B97  |.  74 22         je      short 00403BBB<br />
  00403B99  |.  8B0E          mov     ecx, dword ptr [esi]<br />
  00403B9B  |.  8B1F          mov     ebx, dword ptr [edi]<br />
  00403B9D  |.  38D9          cmp     cl, bl<br />
  00403B9F  |.  75 41         jnz     short 00403BE2<br />
  00403BA1  |.  4A            dec     edx<br />
  00403BA2  |.  74 17         je      short 00403BBB<br />
  00403BA4  |.  38FD          cmp     ch, bh<br />
  00403BA6  |.  75 3A         jnz     short 00403BE2<br />
  00403BA8  |.  4A            dec     edx<br />
  00403BA9  |.  74 10         je      short 00403BBB<br />
  00403BAB  |.  81E3 0000FF00 and     ebx, 0FF0000<br />
  00403BB1  |.  81E1 0000FF00 and     ecx, 0FF0000<br />
  00403BB7  |.  39D9          cmp     ecx, ebx<br />
  00403BB9  |.  75 27         jnz     short 00403BE2<br />
  00403BBB  |&gt;  01C0          add     eax, eax<br />
  00403BBD  |.  EB 23         jmp     short 00403BE2<br />
  00403BBF  |&gt;  8B57 FC       mov     edx, dword ptr [edi-4]<br />
  00403BC2  |.  29D0          sub     eax, edx<br />
  00403BC4  |.  EB 1C         jmp     short 00403BE2<br />
  00403BC6  |&gt;  8B46 FC       mov     eax, dword ptr [esi-4]<br />
  00403BC9  |.  29D0          sub     eax, edx<br />
  00403BCB  |.  EB 15         jmp     short 00403BE2<br />
  00403BCD  |&gt;  5A            pop     edx<br />
  00403BCE  |.  38D9          cmp     cl, bl<br />
  00403BD0  |.  75 10         jnz     short 00403BE2<br />
  00403BD2  |.  38FD          cmp     ch, bh<br />
  00403BD4  |.  75 0C         jnz     short 00403BE2<br />
  00403BD6  |.  C1E9 10       shr     ecx, 10<br />
  00403BD9  |.  C1EB 10       shr     ebx, 10<br />
  00403BDC  |.  38D9          cmp     cl, bl<br />
  00403BDE  |.  75 02         jnz     short 00403BE2<br />
  00403BE0  |.  38FD          cmp     ch, bh<br />
  00403BE2  |&gt;  5F            pop     edi<br />
  00403BE3  |.  5E            pop     esi<br />
  00403BE4  |.  5B            pop     ebx<br />
  00403BE5  \.  C3            retn<br />
  反正看到这些,我是头疼,正打算埋头分析下这个子程序的作用时,发现了旁边的EDX寄存器的内容貌似就是我们所要求的注册<br />
  码,而且还有我们的错误注册码,记下正确的,运行程序,输入刚才输入的用户名,并输入这个注册码,点击OK,正确的提示<br />
  出现了.那么很明显,注册码不是在这个子程序中产生的,这个子程序只是对输入的注册码和正确的注册码比较看看输入的是否正确<br />
      4、重新OD载入,输入错误的注册码,再让OD断下,上次下断的时候没注意,原来在这个call断下之前,edx的内容就已经是<br />
  正确的注册码了.那继续向上翻,看看这个edx的内容是在哪儿被修改的呢?<br />
  004417F8  |.  E8 FBFEFFFF   call    004416F8                         ;  关键call,根据用户名计算注册码<br />
  004417FD  |.  8B55 F8       mov     edx, dword ptr [ebp-8]           ;  原来这里edx被修改了<br />
  00441800  |.  58            pop     eax<br />
  00441801  |.  E8 3E23FCFF   call    00403B44<br />
  同样,在上面那个call处下断(删除原来的断点),跑起来后继续输入错误的注册码,点击ok程序被断,F7跟进这个call,进来后<br />
  我们就在寄存器窗口中发现了我们输入的用户名,那么我们可以猜想,这个call可能就是根据用户名来计算注册码了.F8单步跟踪<br />
  来了解这段程序的作用.<br />
  004416F8  /$  53            push    ebx<br />
  004416F9  |.  56            push    esi<br />
  004416FA  |.  57            push    edi<br />
  004416FB  |.  83C4 DC       add     esp, -24<br />
  004416FE  |.  891424        mov     dword ptr [esp], edx             ;  edx指向正确序列号待存放地址<br />
  00441701  |.  8BF8          mov     edi, eax                         ;  使edi指向用户名首址<br />
  00441703  |.  BB 05033949   mov     ebx, 49390305                    ;  ebx存放一个常数,参与后面的异或运算<br />
  00441708  |.  BE 20126348   mov     esi, 48631220                    ;  esi存放另一个常数,参与后面的异或运算<br />
  0044170D  |.  8BC7          mov     eax, edi<br />
  0044170F  |.  E8 2023FCFF   call    00403A34                         ;  此处的call用来计算用户名长度<br />
  00441714  |.  85C0          test    eax, eax                         ;  eax存放用户名长度<br />
  00441716  |.  7E 2E         jle     short 00441746<br />
  00441718  |.  BA 01000000   mov     edx, 1                           ;  计数器,相当于name[edx]<br />
  0044171D  |&gt;  33C9          /xor     ecx, ecx                        ;  ecx清零<br />
  0044171F  |.  8A4C17 FF     |mov     cl, byte ptr [edi+edx-1]        ;  取用户名一个字节到cl=name[ecx-1]<br />
  00441723  |.  33D9          |xor     ebx, ecx                        ;  将ebx与ecx异或,ecx为取出的用户名的一个字节<br />
  00441725  |.  33F3          |xor     esi, ebx                        ;  再将esi与上一步的ebx异或<br />
  00441727  |.  F6C3 01       |test    bl, 1                           ;  第一步异或的结果低8位与1的与是否为0<br />
  0044172A  |.  74 0F         |je      short 0044173B<br />
  0044172C  |.  D1FB          |sar     ebx, 1                          ;  ebx算术右移一位<br />
  0044172E  |.  79 03         |jns     short 00441733                  ;  符号为正,跳<br />
  00441730  |.  83D3 00       |adc     ebx, 0<br />
  00441733  |&gt;  81F3 11032001 |xor     ebx, 1200311                    ;  将ebx中的内容和1200311异或<br />
  00441739  |.  EB 07         |jmp     short 00441742<br />
  0044173B  |&gt;  D1FB          |sar     ebx, 1                          ;  ebx算术右移一位<br />
  0044173D  |.  79 03         |jns     short 00441742                  ;  符号为正,跳<br />
  0044173F  |.  83D3 00       |adc     ebx, 0<br />
  00441742  |&gt;  42            |inc     edx                             ;  循环处理下一位<br />
  00441743  |.  48            |dec     eax                             ;  用户名长度减一<br />
  00441744  |.^ 75 D7         \jnz     short 0044171D                  ;  未处理完,跳<br />
  00441746  |&gt;  8B0424        mov     eax, dword ptr [esp]<br />
  00441749  |.  50            push    eax                              ;  <br />
  0044174A  |.  8BC3          mov     eax, ebx                         ;  ebx为上面循环的运算结果<br />
  0044174C  |.  25 FFFF0000   and     eax, 0FFFF                       ;  运算结果与0FFFF与,将运算结果高16位清零<br />
  00441751  |.  894424 08     mov     dword ptr [esp+8], eax           ;  [esp+8]为第一部分注册码,即ebx的低16位<br />
  00441755  |.  C64424 0C 00  mov     byte ptr [esp+C], 0<br />
  0044175A  |.  C1EB 10       shr     ebx, 10                          ;  ebx逻辑右移16位<br />
  0044175D  |.  895C24 10     mov     dword ptr [esp+10], ebx          ;  取运算结果的高16位<br />
  00441761  |.  C64424 14 00  mov     byte ptr [esp+14], 0<br />
  00441766  |.  8BC6          mov     eax, esi<br />
  00441768  |.  25 FFFF0000   and     eax, 0FFFF                       ;  屏蔽esi的高16位<br />
  0044176D  |.  894424 18     mov     dword ptr [esp+18], eax          ;  存放运算结果的低16位<br />
  00441771  |.  C64424 1C 00  mov     byte ptr [esp+1C], 0<br />
  00441776  |.  C1EE 10       shr     esi, 10                          ;  屏蔽esi的低16位<br />
  00441779  |.  897424 20     mov     dword ptr [esp+20], esi          ;  存放运算结果的高16位<br />
  0044177D  |.  C64424 24 00  mov     byte ptr [esp+24], 0<br />
  00441782  |.  8D5424 08     lea     edx, dword ptr [esp+8]<br />
  00441786  |.  B9 03000000   mov     ecx, 3<br />
  0044178B  |.  B8 A4174400   mov     eax, 004417A4                    ;  ASCII &quot;%.4x-%.4x-%.4x-%.4x&quot;<br />
  00441790  |.  E8 6F68FCFF   call    00408004                         ;  将运算的四个部分,转换为上面的格式<br />
  00441795  |.  83C4 24       add     esp, 24<br />
  00441798  |.  5F            pop     edi<br />
  00441799  |.  5E            pop     esi<br />
  0044179A  |.  5B            pop     ebx<br />
  0044179B  \.  C3            retn<br />
  到这里,我们就可以看到这个crackme的注册码生成过程了,其中用到了两个常数,参与异或运算,然后根据根据异或后的结果进行<br />
  一些算术移位指令,这个过程直到将用户名处理完为止.用户名每个字节的异或结果是累加的,ebx和esi是最终运算结果.<br />
  程序最后将esi和ebx寄存器的内容分拆,进而形成&quot;EBX[后16位]-EBX[高16位]-ESI[后16位]-ESI[高16位]&quot;的注册码.<br />
      5、由于我比较笨，也比较懒，而且《加密与解密第三版》上说可以直接用原程序的汇编代码来写注册机，那么我就试试了<br />
  参考P109-P110页的代码，写出了这个CrackMe的注册机，注册算法代码如下：<br />
  BOOL GenRegCode(HWND hwnd)<br />
  {<br />
  	TCHAR cCode[100]={0};<br />
  	GetDlgItemText(hwnd,IDC_EDIT1,cName,sizeof(cName)/sizeof(TCHAR)+1);<br />
  	int namelen=strlen(cName);<br />
  	if (namelen==0)<br />
  	{<br />
  		<br />
  		MessageBox(hwnd,&quot;请输入用户名！&quot;,&quot;Error&quot;,MB_ICONEXCLAMATION);<br />
  		return TRUE;<br />
  	}<br />
  	int k1=0,k2=0,k3=0,k4=0;//序列号的四个部分,计算序列号,关键就是将这四个部分计算出来.<br />
  	__asm<br />
  	{<br />
  		mov edi,OFFSET cName//edi指向用户名<br />
  		mov ebx,0x49390305<br />
  		mov esi,0x48631220<br />
  		mov eax,namelen//eax存放用户名长度<br />
  		mov edx,0x1<br />
  	L1:<br />
  		xor ecx,ecx<br />
  		mov cl, byte ptr [edi+edx-1]<br />
  		xor ebx, ecx<br />
  		xor esi, ebx<br />
  		test bl, 0x1<br />
  		je L2<br />
  		sar ebx, 0x1<br />
  		jns L3<br />
  		adc ebx, 0<br />
  	L3:<br />
  		xor ebx, 0x1200311<br />
  		jmp L4<br />
  	L2:	<br />
  		sar ebx, 0x1<br />
  		jns L4<br />
  		adc ebx, 0<br />
  	L4:<br />
  		inc edx<br />
  		dec eax<br />
  		jnz L1<br />
  <br />
  		mov eax,ebx<br />
  		and eax,0x0FFFF<br />
  		mov k1,eax<br />
  <br />
  		shr ebx,0x10<br />
  		mov k2,ebx<br />
  <br />
  		mov eax,esi<br />
  		and eax,0x0FFFF<br />
  		mov k3,eax<br />
  <br />
  		shr esi,0x10<br />
  		mov k4,esi<br />
  	}<br />
  	wsprintf(cCode,TEXT(&quot;%.4X-%.4X-%.4X-%.4X&quot;),k1,k2,k3,k4);<br />
  	SetDlgItemText(hwnd,IDC_EDIT2,cCode);<br />
  	return TRUE;	<br />
  <br />
  }<br />
  <br />
  <br />
  <br />
  <br />
  <br />
--------------------------------------------------------------------------------<br />
【经验总结】<br />
  通过这个crackme又深入的了解了逆向分析的一些基本功，并知道了如何直接用内联汇编来写注册代码。哈哈。加油学习～第一次发破文，有点紧张，错误之处望大家谅解～<br />
  <br />
--------------------------------------------------------------------------------<br />
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!<br />
<br />
                                                       2008年07月13日 下午 03:58:55</div></div><hr />


<div class="post"><div class="posttop"><div class="username">三根火柴</div><div class="date">2008-07-13, 16:44:35</div></div><div class="posttext">支持下,我今天刚买到书,正在加紧学习希望也能写点心得.:):</div></div><hr />


<div class="post"><div class="posttop"><div class="username">zapline</div><div class="date">2008-07-13, 18:21:07</div></div><div class="posttext">不错····<br />
顶</div></div><hr />


<div class="post"><div class="posttop"><div class="username">yingyue</div><div class="date">2008-07-13, 20:08:03</div></div><div class="posttext">第三版果然一看即成高手 ， 强大</div></div><hr />


<div class="post"><div class="posttop"><div class="username">lixupeng</div><div class="date">2008-07-13, 22:13:02</div></div><div class="posttext">不错！！学习:):</div></div><hr />


<div class="post"><div class="posttop"><div class="username">笨笨雄</div><div class="date">2008-07-14, 13:57:26</div></div><div class="posttext">支持~~~~~~~~~~~~~~~</div></div><hr />


<div class="post"><div class="posttop"><div class="username">dearxiao</div><div class="date">2008-07-15, 01:09:06</div></div><div class="posttext">不错 学习了,,</div></div><hr />


<div class="post"><div class="posttop"><div class="username">求学ing</div><div class="date">2008-07-15, 02:03:34</div></div><div class="posttext">好样的:):</div></div><hr />


<div class="post"><div class="posttop"><div class="username">yunfeng</div><div class="date">2008-07-15, 06:46:25</div></div><div class="posttext">看完这本书后，很多菜鸟也将进入高手行列了。</div></div><hr />


<div class="post"><div class="posttop"><div class="username">刀鱼</div><div class="date">2008-07-15, 12:59:03</div></div><div class="posttext">铜鼎！ 我没你看得多！ 我也想成为高手！ 瓦咔咔！</div></div><hr />


<div class="post"><div class="posttop"><div class="username">netknight</div><div class="date">2008-07-15, 20:12:51</div></div><div class="posttext">【文章标题】: 【看雪读书月】【学习心得】我的第一个CrackMe分析，及注册机制作<br />
【文章作者】: usufu<br />
【软件名称】: echap303.exe<br />
【软件大小】: 303KB<br />
【下载地址】: 附件上传<br />
【加壳方式】: 无壳<br />
【保护方式】: 无壳<br />
【编写语言】: Borland ...<br />
哇厉害学习学习</div></div><hr />


<div class="post"><div class="posttop"><div class="username">linhanshi</div><div class="date">2008-07-15, 20:21:14</div></div><div class="posttext">Support.</div></div><hr />


<div class="post"><div class="posttop"><div class="username">Mistakes</div><div class="date">2008-07-16, 11:06:52</div></div><div class="posttext">我就一本加密与解密2的。<br />
楼主不错。才5天就成了</div></div><hr />


<div class="post"><div class="posttop"><div class="username">sfind</div><div class="date">2008-07-16, 11:58:38</div></div><div class="posttext">完全支持，想当年我第一次写出注册机的时候，那是相当兴奋滴~</div></div><hr />


<div class="post"><div class="posttop"><div class="username">C漫步者</div><div class="date">2008-07-16, 18:56:10</div></div><div class="posttext">我们这里还买不到《加密与解密三》:confused:</div></div><hr />


<div class="post"><div class="posttop"><div class="username">bluecode</div><div class="date">2008-07-16, 21:11:15</div></div><div class="posttext">先顶了。。。。。。。</div></div><hr />


<div class="post"><div class="posttop"><div class="username">Hannibal</div><div class="date">2008-07-17, 17:05:59</div></div><div class="posttext">本想研究下那个技术挑战参加下看雪读书月活动的，但我等小辈水平不足，只能研究到用户名的限制，和第一步的一些对应关系后就实在是找不到北了。<br />
<br />
<br />
<br />
LZ好强啊！知道了用户名的限制之后，这个crackme你基本上已经搞定了啊:): <br />
<br />
不过我猜你不是那个意思，<br />
给你一点提示：<br />
<br />
接下来是：花指令，异常处理，输入错误参数让函数出错，构造表和根据表造出用户名和注册码，呵呵。<br />
我看见题目晚了，花了四个小时看懂了注册全过程:p: <br />
自己写了一个注册机，呵呵不过参赛算是没有希望了:eek:</div></div><hr />


<div class="post"><div class="posttop"><div class="username">usufu</div><div class="date">2008-07-17, 19:04:37</div></div><div class="posttext">谢谢楼上的指点啊～</div></div><hr />


<div class="post"><div class="posttop"><div class="username">sxsxsxsx</div><div class="date">2008-07-27, 14:03:26</div></div><div class="posttext">书要买一本学习。</div></div><hr />


<div class="post"><div class="posttop"><div class="username">yamu</div><div class="date">2008-07-29, 15:17:04</div></div><div class="posttext">谢谢lz的资料</div></div><hr />


<div class="post"><div class="posttop"><div class="username">风尘秀吉</div><div class="date">2008-07-29, 20:32:00</div></div><div class="posttext">【文章标题】: 【看雪读书月】【学习心得】我的第一个CrackMe分析，及注册机制作<br />
【文章作者】: usufu<br />
【软件名称】: echap303.exe<br />
【软件大小】: 303KB<br />
【下载地址】: 附件上传<br />
【加壳方式】: 无壳<br />
【保护方式】: 无壳<br />
【编写语言】: Borland ...<br />
貌似挺简单的  支持原创</div></div><hr />


<div class="post"><div class="posttop"><div class="username">七号</div><div class="date">2008-09-11, 10:06:15</div></div><div class="posttext">留个记号。。学习。。</div></div><hr />


<div class="post"><div class="posttop"><div class="username">billlin</div><div class="date">2008-09-11, 10:24:00</div></div><div class="posttext">加密与解密！！</div></div><hr />


<div class="post"><div class="posttop"><div class="username">爱琴海</div><div class="date">2008-09-11, 12:16:22</div></div><div class="posttext">^_^<br />
<br />
我有书哦<br />
<br />
成为高手需要的是经验和基础功</div></div><hr />


<div class="post"><div class="posttop"><div class="username">yjlwhuhan枫</div><div class="date">2008-09-11, 21:55:20</div></div><div class="posttext">第三版果然一看即成高手 ， 强大</div></div><hr />


<div class="post"><div class="posttop"><div class="username">cnlcg</div><div class="date">2008-09-12, 16:23:31</div></div><div class="posttext">支持下！！！</div></div><hr />


<div class="post"><div class="posttop"><div class="username">天马行空</div><div class="date">2008-09-12, 16:37:50</div></div><div class="posttext">厉害!!!说来惭愧,我2005年注册的看雪,到现在还不会crack一个小软件:o: <br />
都怪自己没毅力,看到代码头大就没再来了,现在又想学了真是后悔那:eek:</div></div><hr />


<div class="post"><div class="posttop"><div class="username">yamu</div><div class="date">2008-09-23, 15:03:37</div></div><div class="posttext">lz强大啊 收藏学习</div></div><hr />


<div class="post"><div class="posttop"><div class="username">gfansenhua</div><div class="date">2008-09-24, 13:30:56</div></div><div class="posttext">不错，帮顶一下，学习！</div></div><hr />


<div class="post"><div class="posttop"><div class="username">cao操</div><div class="date">2008-09-25, 19:26:34</div></div><div class="posttext">偶试一本也没有:eek:</div></div><hr />


<div class="post"><div class="posttop"><div class="username">水边月色</div><div class="date">2008-09-25, 19:35:34</div></div><div class="posttext">我想 我还要慢慢看看！</div></div><hr />


<div class="post"><div class="posttop"><div class="username">bingxue冰雪</div><div class="date">2008-09-25, 22:29:59</div></div><div class="posttext">我想破解某个软件，可是什么都不会呢，糟糕哦！真的不知道如何入手呢？</div></div><hr />


<div class="post"><div class="posttop"><div class="username">年轻的兵</div><div class="date">2008-10-15, 17:00:27</div></div><div class="posttext">我也要去淘一本书！！</div></div><hr />


<div class="post"><div class="posttop"><div class="username">tygyxyw</div><div class="date">2008-10-19, 06:40:50</div></div><div class="posttext">00403B44是Delphi的标准函数，用de看一下就知道了。</div></div><hr />


<div id="copyright">vBulletin&reg; v3.8.3，版权所有 &copy;2000-2010，Jelsoft Enterprises Ltd.</div>
</div>
</body>
</html>